#include <stdio.h>
#include "004.static2.h"

/* static存储类可以修饰局部变量、全局变量和函数
 * 1.修饰局部变量，变量分配在静态区，整个进程运行期间都会存在；
 * 2.修饰全局变量，变量作用域只限于当前文件，不可在其他文件中通过extern引用；
 * 3.修饰函数，该函数作用域只限于当前文件，不可在其他文件中通过extern引用。
 * */

extern int m; // 引用004.static2.c中的全局变量
extern int n; // 引用004.static2.c中的静态全局变量

int func1();

int main() {
    printf("m:%d\n", m);
    // printf("n:%d\n", n); // undefined reference to `n'

    int i = 10;
    int ret = 0;
    while(i-- > 0) {
        int ret = func1();
        printf("%d\n", ret);
    }

    return 0;
}

int func1() {
    static int i = 2; // static局部变量初始化只在函数首次被调用时执行一次，再调用该函数则不执行该行了
    return i++; // 先返回i的值，再执行i+=1，等价于：int tmp = i; i += 1; return tmp;
}

